/****   request.js   ****/
// 导入axios
import axios from 'axios'
// 使用element-ui Message做消息提醒
import { Message,Loading} from 'element-ui';
import qs from 'axios'// 引入qs模块，用来序列化post类型的数据


//1. 创建新的axios实例，
const service = axios.create({
    // 公共接口
    baseURL:'http://www.caihuay.com.cn',
    // 超时时间 单位是ms，这里设置了3s的超时时间
    timeout: 3 * 1000
})

//加载数据时，打开和关闭动画特效
const loading = {
    loadingInstance:null,   //Loading实例
    open:function (){
        // console.log("加载中",this.loadingInstance);
        if(this.loadingInstance==null){   //创造单例，防止切换路由重复加载
            this.loadingInstance=Loading.service({
                lock: true,//lock的修改符--默认是false
                text: "拼命加载中，请稍候...",//显示在加载图标下方的加载文案
                background: "rgba(0,0,0,0.8)",//遮罩层颜色
                spinner: "el-icon-loading",//自定义加载图标类名
            })
        }
    },

    close:function (){   //关闭加载
        if(this.loadingInstance!=null){
            this.loadingInstance.close();
        }
        this.loadingInstance=null;
    }
}

// 添加请求拦截器
service.interceptors.request.use((config)=>{
    // 在发送请求之前做些什么,打开加载效果
    loading.open();

   //请求头携带token
    // 每次发送请求之前判断vuex中是否存在token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    const token = window.sessionStorage.getItem('token');
    if(token){
        config.params = {'token':token} //如果要求携带在参数中
        config.headers.token= token; //如果要求携带在请求头中
    }
    return config;

}, function (error) {
    // 对请求错误做些什么
    loading.close();
    return Promise.reject(error);
});

// 添加响应拦截器
service.interceptors.response.use((response)=>{
    //接收到响应数据并成功后的一些共有的处理，关闭loading等
    loading.close();
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {
        return Promise.resolve(response);
    } else {
        return Promise.reject(response);
    }

    // return response;
}, function (error) {
    loading.close();

    // if (error.response.status) {
    //     switch (error.response.status) {
    //         // 401: 未登录
    //         // 未登录则跳转登录页面，并携带当前页面的路径
    //         // 在登录成功后返回当前页面，这一步需要在登录页操作。
    //         case 401:
    //             router.replace({
    //                 path: '/Gegister',
    //                 query: {
    //                     redirect: router.currentRoute.fullPath
    //                 }
    //             });
    //             break;
    //
    //         // 403 token过期
    //         // 登录过期对用户进行提示
    //         // 清除本地token和清空vuex中token对象
    //         // 跳转登录页面
    //         case 403:
    //             Toast({
    //                 message: '登录过期，请重新登录',
    //                 duration: 1000,
    //                 forbidClick: true
    //             });
    //             // 清除token
    //             localStorage.removeItem('token');
    //             store.commit('loginSuccess', null);
    //             // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
    //             setTimeout(() => {
    //                 router.replace({
    //                     path: '/Gegister',
    //                     query: {
    //                         redirect: router.currentRoute.fullPath
    //                     }
    //                 });
    //             }, 1000);
    //             break;
    //
    //         // 404请求不存在
    //         case 404:
    //             Toast({
    //                 message: '网络请求不存在',
    //                 duration: 1500,
    //                 forbidClick: true
    //             });
    //             break;
    //         // 其他错误，直接抛出错误提示
    //         default:
    //             Toast({
    //                 message: error.response.data.message,
    //                 duration: 1500,
    //                 forbidClick: true
    //             });
    //     }
    //     return Promise.reject(error.response);
    // }

    return Promise.reject(error);

});

//4.导入文件
export default service
